/**
 * 给定数组，操作一次，将数组的某个子段用其积代替，
 * 要求使得新数组的累加和最大，问操作方案
 * 首先首尾的1肯定不用考虑
 * 如果某个子段其积大于等于其和，就可以操作。
 * 注意到如果积大到一定程度，直接全乘即可，具体可以设置1E6左右即可
 * 首先处理连续的非1段和1段，如果某一个非1段大到一定程度，全乘即可
 * 如果非1段连乘积大到一定程度也可以全乘
 * 如果都不满足，说明非1段的数量比较少。
 * 直接做个双重循环即可。
 */
#include <bits/stdc++.h>
using namespace std;

using llt = long long;
using pii = pair<int, int>;

llt const LIMIT = 2E6+1;
llt const INF = INT_MAX;

int N;
vector<llt> A;

pii proc(){
    int start = 0;
    while(start < N and A[start] == 1) ++start;
    if(start == N) return {1, 1};

    int end = N - 1;
    while(A[end] == 1) --end;
    assert(end != -1);

    vector<array<llt, 4>> vec;
    vec.reserve(N);

    bool flag = false;
    int k = start;
    while(1){
        llt origin = k;
        llt x = 0, ji = 1;
        while(k <= end and A[k] != 1){
            x += A[k];
            if(ji < LIMIT) ji *= A[k];
            else ji = INF, flag = true;
            ++k;
        }
        vec.push_back({ji, x, origin, k - 1LL});
        if(k == end + 1) break;
        
        x = 0;
        while(k <= end and A[k] == 1){
            ++k; ++x;
        }
        assert(k != end + 1);
        vec.push_back({x, 0LL, 0LL, 0LL});
    }

    int n = vec.size();
    if(flag or 1 == n) return {start + 1, end + 1};
    assert(n & 1);

    llt ji = 1;
    for(int i=0;i<n;i+=2){
        ji *= vec[i][0];
        if(ji > LIMIT) return {start + 1, end + 1};
    }

    pii ans = {-1, -1};
    llt cha = -1;
    for(int i=0;i<n;i+=2)for(int j=i;j<n;j+=2){
        llt ji = 1, he = 0;
        for(int k=i;k<=j;++k){
            if(k & 1) he += vec[k][0];
            else he += vec[k][1], ji *= vec[k][0];
        }        
        auto tmp = ji - he;
        if(-1 == cha or cha < tmp){
            cha = tmp;
            ans = {i, j};
        }
    }
    return {vec[ans.first][2] + 1, vec[ans.second][3] + 1};
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);
    int nofkase = 1; 
    cin >> nofkase;
    for(int kase=1;kase<=nofkase;++kase){
        cin >> N;
        A.assign(N, 0);
        for(auto & i : A) cin >> i;
        auto ans = proc();
        cout << ans.first << " " << ans.second << endl;
    }
    return 0;
}